pixelcache: use factor instead of margin
authorChristian Hergert <christian@hergert.me>
Mon, 14 Sep 2015 04:08:57 +0000 (21:08 -0700)
committerChristian Hergert <christian@hergert.me>
Wed, 16 Sep 2015 18:24:29 +0000 (11:24 -0700)
Instead of using a fixed size, use a factor of the surface size. This
helps in situations where animations of surrounding widgets are used
and cause a rapid rate of surface destroy/create cycles.

gtk/gtkpixelcache.c

index 6661f3d0074c51869d6b04b4c133e847ec13bf2a..dae40447a824bacc9ef4734f0d2a60b3a5d15c13 100644 (file)
@@ -29,8 +29,8 @@
 
 /* When resizing viewport we allow this extra
    size to avoid constantly reallocating when resizing */
-#define ALLOW_SMALLER_SIZE 32
-#define ALLOW_LARGER_SIZE 32
+#define ALLOW_SMALLER_SIZE_FACTOR 0.5
+#define ALLOW_LARGER_SIZE_FACTOR  1.25
 
 struct _GtkPixelCache {
   cairo_surface_t *surface;
@@ -213,10 +213,10 @@ _gtk_pixel_cache_create_surface_if_needed (GtkPixelCache         *cache,
   /* If current surface can't fit view_rect or is too large, kill it */
   if (cache->surface != NULL &&
       (cairo_surface_get_content (cache->surface) != content ||
-       cache->surface_w < MAX(view_rect->width, surface_w - ALLOW_SMALLER_SIZE) ||
-       cache->surface_w > surface_w + ALLOW_LARGER_SIZE ||
-       cache->surface_h < MAX(view_rect->height, surface_h - ALLOW_SMALLER_SIZE) ||
-       cache->surface_h > surface_h + ALLOW_LARGER_SIZE ||
+       cache->surface_w < MAX(view_rect->width, surface_w * ALLOW_SMALLER_SIZE_FACTOR) ||
+       cache->surface_w > surface_w * ALLOW_LARGER_SIZE_FACTOR ||
+       cache->surface_h < MAX(view_rect->height, surface_h * ALLOW_SMALLER_SIZE_FACTOR) ||
+       cache->surface_h > surface_h * ALLOW_LARGER_SIZE_FACTOR ||
        cache->surface_scale != gdk_window_get_scale_factor (window)))
     {
       cairo_surface_destroy (cache->surface);